package leetcode.alg.demo;

/**
 * 实现 pow(x, n) ，即计算 x 的 n 次幂函数。
 *
 * 示例 1:
 * 输入: 2.00000, 10
 * 输出: 1024.00000
 *
 * 示例 2:
 * 输入: 2.10000, 3
 * 输出: 9.26100
 *
 * 示例 3:
 * 输入: 2.00000, -2
 * 输出: 0.25000
 * 解释: 2-2 = 1/22 = 1/4 = 0.25
 *
 * 说明:
 * -100.0 < x < 100.0
 * n 是 32 位有符号整数，其数值范围是 [−231, 231 − 1] 。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/powx-n
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Pow_x_n {
    public static void main(String[] args){
        System.out.println(myPow(2.0, 10));
        System.out.println(myPow(-2.0, -2));
    }

    /**
     * x ^ n = (e ^ ln(x)) ^ n =  e ^ (n * ln(x))
     * @param x
     * @param n
     * @return
     */
    public static double myPow(double x, int n) {
        if(x == 0.0){
            return 0.0;
        }
        double result = 0.0;
        if(x > 0 || ((x < 0) && (n % 2 == 0))){
            result = Math.exp(n * Math.log(Math.abs(x)));
        }else{
            result = -Math.exp(n * Math.log(-x));
        }
        return result;
    }
}
